package map;

import java.util.HashMap;
import java.util.Map;

/**
 * java.util.Map -> 查找表:
 * Map体现的结构是一个多行两列的表格.其中左列称为Key，有列称为value.
 * Map总是成对保存数据，并且总是根据key获取对应的value.
 * Map要求kry不允许重复(equals比较判断key的重复).
 * Map是一个接口，规定了Map的相关操作，常用实现类为:
 * java.util.HashMap:散列表，使用散列表算法实现的Map，当今查询速度最快的数据结构.
 */
public class MapDemo {
    public static void main(String[] args) {
        /** HashMap:散列表,查询速度最快*/
        //Map需要同时指定key和value的泛型类型.
        Map<String,Integer> map = new HashMap();
        /*
            V put(K k,V v)
            将给定的一组键值对存入Map.如鬼使用重复的key存入value则是替换value操作，此时返回值
            为旧的value值，否则为null.
         */
        Integer num = map.put("数学",99);
        System.out.println("num:"+num);//返回则为null.
        //切记不要使用基本类型接受返回值，避免拆箱导致空指针异常.
        num = map.put("数学",0);
        System.out.println(num);//重复的key,替换value操作,返回为旧的value值.
        map.put("语文",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",95);
        map.put("生物",94);
        System.out.println(map);

        num = map.put("英语",66);//替换97这个值并将其返回
        System.out.println(num);
        System.out.println(map);
        /*
            V get(Object key)
            根据给定的key获取对应的value，如果给定的key不存在则返回为null
         */
        num = map.get("生物");
        System.out.println(num);//94
        num = map.get("体育");
        System.out.println(num);//null

        int size = map.size();
        System.out.println("size:"+size);

        boolean ck = map.containsKey("生物");
        System.out.println("包含key:"+ck);
        boolean cv = map.containsValue(95);
        System.out.println("包含Value:"+cv);

        boolean bo = map.isEmpty();
        System.out.println("是否为空:"+bo);

        num = map.remove("物理");
        System.out.println(num);//返回删除的value值96
        System.out.println(map);

        map.clear();
        System.out.println(map);
        bo = map.isEmpty();
        System.out.println("是否为空:"+bo);

    }
}
